/*******************************************************
> Copyright (C) 2024 ==iot== All rights reserved.
> File Name: client.c
> Author: wyf
> Created Time: 2024年08月12日 星期一 17时56分56秒
***************************************************/


#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <dirent.h> //目录名获取配合DIR
#include <assert.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <unistd.h>
#include <fcntl.h> //文件控制操作
#include <sys/types.h> //获取pid等
#include <sys/wait.h> //等待子进程结束
#include <time.h> //时间获取
#include <sys/ipc.h> //进程通信
#include <sys/msg.h> //消息队列
#include <sys/shm.h> //共享内存
#include <signal.h> //信号处理
#include <pthread.h> //线程
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>

//客户端给服务器发送一个文件并写入新文件。
int main(int argc, const char* argv[])
{
	int sock = 0;
	int ret = 0;
    int file_fd = 0;
	char buf[1024] = { 0 };

	struct sockaddr_in serAddr;
	memset(&serAddr, 0, sizeof(serAddr));

	sock = socket(AF_INET, SOCK_DGRAM, 0);
	if (sock == -1)
	{
		perror("sock");
		exit(-1);
	}

	serAddr.sin_family = AF_INET;
	serAddr.sin_port = 5491;
	serAddr.sin_addr.s_addr = inet_addr("192.168.48.128");

    // 打开要上传的文件
    file_fd = open("../test_data/123.jpg", O_RDONLY);
    if (file_fd < 0) {
        perror("open");
        close(sock);
        exit(-1);
    }

    while (1) {
        ret = read(file_fd, buf, sizeof(buf)); 
        if (ret > 0) {  
            sendto(sock, buf, ret, 0, (struct sockaddr*)&serAddr, sizeof(serAddr));  // 发送实际读取的字节数!!!!
            sleep(1);                                                               //超过1024字节，需要延时发送，否则会丢失数据，或者乱序！！！
        }
        else if (ret == 0) {  // 文件读取结束
            break;
        }
        else { 
            perror("read");
            close(file_fd);
            close(sock);
            exit(-1);
        }
    }

    printf("File sent successfully.\n");

    close(file_fd); 
    close(sock);


    return 0;

}


